package cl.jsoftlabs.gwt.soccer.client;

import java.util.List;

import cl.jsoftlabs.gwt.soccer.client.bean.FutbolClubVO;
import cl.jsoftlabs.gwt.soccer.client.bean.PaisVO;
import cl.jsoftlabs.gwt.soccer.client.mvc.controllers.AppController;
import cl.jsoftlabs.gwt.soccer.client.mvc.controllers.FutbolClubController;
import cl.jsoftlabs.gwt.soccer.client.mvc.events.AppEvents;
import cl.jsoftlabs.gwt.soccer.client.services.FutbolClubService;
import cl.jsoftlabs.gwt.soccer.client.services.PaisService;

import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.data.BaseListLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ListLoader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.store.ListStore;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class SoccerEntryPoint implements EntryPoint{

	@Override
	public void onModuleLoad() {
		
		defineValoresGlobales();
		
		Dispatcher dispatcher = Dispatcher.get();
		dispatcher.addController(new AppController());
		dispatcher.addController(new FutbolClubController());
		dispatcher.dispatch(AppEvents.Init);
		dispatcher.dispatch(AppEvents.UIReady);
		GXT.hideLoadingPanel("loading");	
	}
	
	

	private void defineValoresGlobales() {
		BeanModelReader reader = new BeanModelReader();
		
// PAIS
		RpcProxy<List<PaisVO>> proxyPaises = new RpcProxy<List<PaisVO>>() {
			@Override
			public void load(Object loadConfig, AsyncCallback<List<PaisVO>> callback) {
				PaisService.Util.getInstance().obtenerPaises(callback);
			}
		};
		ListLoader<ListLoadResult<ModelData>> loader = new BaseListLoader<ListLoadResult<ModelData>>(proxyPaises, reader);
		loader.load();
		ListStore<BeanModel> paisStore = new ListStore<BeanModel>(loader);
		Registry.register(AppConstantes.PAIS_SERVICE, PaisService.Util.getInstance());
		Registry.register(AppConstantes.PAIS_STORE_LIST, paisStore);
		
//CLUBES DE FUTBOL
		RpcProxy<List<FutbolClubVO>> proxyFutbolCLub = new RpcProxy<List<FutbolClubVO>>() {
			@Override
			public void load(Object loadConfig, AsyncCallback<List<FutbolClubVO>> callback) {
				FutbolClubService.Util.getInstance().obtenerClubes(callback);
			}
		};
		ListLoader<ListLoadResult<ModelData>> loaderFC = new BaseListLoader<ListLoadResult<ModelData>>(proxyFutbolCLub, reader);
		loaderFC.load();
		ListStore<BeanModel> fcStore = new ListStore<BeanModel>(loaderFC);
		Registry.register(AppConstantes.CLUBES_STORE_LIST, fcStore);
	//fin del metodo
	}
	
}
